// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  try {
    const wxContext = cloud.getWXContext()
    const openid = wxContext.OPENID
    
    if (!openid) {
      return {
        success: false,
        errMsg: '未获取到用户openid'
      }
    }
    
    const { action, cartData } = event
    
    // 获取用户购物车集合
    const cartCollection = db.collection('carts')
    
    // 查询用户是否已有购物车数据
    const { data: userCart } = await cartCollection.where({
      _openid: openid
    }).get()
    
    // 根据不同操作执行不同逻辑
    if (action === 'get') {
      // 获取购物车数据
      if (userCart && userCart.length > 0) {
        return {
          success: true,
          data: userCart[0].items || []
        }
      } else {
        return {
          success: true,
          data: []
        }
      }
    } else if (action === 'update') {
      // 更新购物车数据
      if (userCart && userCart.length > 0) {
        // 更新已有购物车
        await cartCollection.where({
          _openid: openid
        }).update({
          data: {
            items: cartData,
            updatedAt: db.serverDate()
          }
        })
      } else {
        // 创建新购物车
        await cartCollection.add({
          data: {
            _openid: openid,
            items: cartData,
            createdAt: db.serverDate(),
            updatedAt: db.serverDate()
          }
        })
      }
      
      return {
        success: true,
        data: cartData
      }
    } else if (action === 'clear') {
      // 清空购物车
      if (userCart && userCart.length > 0) {
        await cartCollection.where({
          _openid: openid
        }).update({
          data: {
            items: [],
            updatedAt: db.serverDate()
          }
        })
      }
      
      return {
        success: true,
        data: []
      }
    } else {
      return {
        success: false,
        errMsg: '无效的操作类型'
      }
    }
  } catch (err) {
    return {
      success: false,
      errMsg: err.message
    }
  }
}